熟悉 Dockerfile 的讀者一定都熟悉撰寫 Dockerfile 的過程,其中很重要的一個環節是選擇一個 Base Image。
本篇文章的標題列舉的大量的 base image,包含了 alpine, slim, stretch ... 等,對於使用者來說,到底這些 image 差異是什麼,選擇上有什麼需要注意的
舉例來說, 當 image tag 結尾是 -slim 時,通常代表的是完整版本的相反體,也就是 只有安裝滿足應用所需要的依賴性套件而已,其餘用不到的都沒有安裝。
透過這方式整個 image 的大小也會相對比較小,畢竟用不到的軟體都沒有被安裝
作者提到說當使用 slim image 出現無法解釋的問題時,可以先嘗試使用完整版本的 image 先行除錯看看。
至於 Apline 的版本,則是基於 Alpine Linux Project 這個作業系統所發展的版本,其因為簡單且 image size 不大而廣受使用。但是使用上也是有很多要注意的地方,譬如一些相容性問題,作者提到 python 內就有 Debian/Alpine 彼此不相容的地方,導致除錯時會很生氣。
最後作者還提到選擇 image 的一些想法
1. 沒有硬碟空間的考量,要趕快上線使用且沒有時間慢慢測試,就直接使用知名的完整image,如 debian 等
2. 有硬碟空間考量且很明確要使用的工具是什麼,可以考慮使用 -slim 的版本
...等
原文:
https://medium.com/swlh/alpine-slim-stretch-buster-jessie-bullseye-bookworm-what-are-the-differences-in-docker-62171ed4531d
「alpine docker」的推薦目錄:
- 關於alpine docker 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於alpine docker 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於alpine docker 在 Official Alpine Linux Docker image. Win at minimalism! - GitHub 的評價
- 關於alpine docker 在 Cannot run executables with Alpine and Busybox docker images 的評價
- 關於alpine docker 在 [Docker] Bridge Network 簡介 - 小信豬的原始部落 的評價
alpine docker 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
今天這篇文章是作者工作多年來,對於 Dockerfile 的一些想法與學習到的經驗,主要內容是講述到底如何最佳化 Dockerfile 的內容,實作上有哪些底可以參考與注意
1. 利用 Cache 的概念來加速建置的時間,最明顯的範例就是 RUN 這個指令,很常看到大家會透過一次 RUN 指令來安裝全部使用的套件,而非每個指令單獨一個 RUN,後者會產生眾多的的 Layer 數量
2. 沒有使用到的套件就不需要安裝,盡量保持精準原則,只安裝必要的相依性套件。這過這些階段可以節省一些 Image 大小,對於未來下載與部署都能夠有一些速度上的提升
3. 採用官方的 image 作為 base image,這部分的安全性會更佳保證,同時內容也會有專門團隊維護。此外 tag 部份也要注意不要使用 latest,最好能夠針對需求去固定版本,以免上游更新後,重新建置的 image 產生出不同的執行結果,這時候除錯也很麻煩
4. 採用 Multi-stage 的方式來建置你的環境,最常見的範例就是將編譯環境與執行環境分開。第一個 Stage 先準備建置環境,安裝相關的工具最後編譯出執行檔案,接者把該檔案複製到第二個 Stage 去單純執行即可
除了這些外,也有些滿常見的概念譬如,能的話盡量透過 USER 去指定使用者,而不是採用 root 的方式直接碾壓過去。
至於要不要使用 Alpine ,這部分見仁見智,畢竟 Alpine 某些版本會有些問題,特別是 Kubernetes 內可能會有 DNS 查詢的問題
我個人是非常討厭精簡化的容器,因為當發生問題想要進去看的時候,連一些工具都沒有,有的連 shell 都沒有,完全不給人除錯用
https://blog.bitsrc.io/best-practices-for-writing-a-dockerfile-68893706c3
alpine docker 在 [Docker] Bridge Network 簡介 - 小信豬的原始部落 的推薦與評價
docker run -dit --name alpine1 alpine ash b75464efd30bf09e118450de2abaeb35549e732bac5805671f1e6e97cd970897 # 啟動alpine linux container 2 ... ... <看更多>
alpine docker 在 Official Alpine Linux Docker image. Win at minimalism! - GitHub 的推薦與評價
Official Alpine Linux Docker image. Win at minimalism! - GitHub - alpinelinux/docker-alpine: Official Alpine Linux Docker image. ... <看更多>